// UpdateProduce.h

#ifndef __UPDATE_PRODUCE_H
#define __UPDATE_PRODUCE_H

#include "UpdatePair.h"

namespace Common
{
namespace Archive
{

struct CUpdatePair2
{
  bool	NewData;
  bool	NewProps;
  bool	IsAnti;
  
  int	DirIndex;
  int	ArcIndex;
  int	NewNameIndex;

  bool ExistOnDisk() const { return DirIndex != -1; }
  bool ExistInArchive() const { return ArcIndex != -1; }

  CUpdatePair2(): IsAnti(false), DirIndex(-1), ArcIndex(-1), NewNameIndex(-1) {}
  CUpdatePair2(const CUpdatePair2 & obj):
	NewData(obj.NewData),
	NewProps(obj.NewProps),
	IsAnti(obj.IsAnti),	
	DirIndex(obj.DirIndex),
	ArcIndex(obj.ArcIndex),
	NewNameIndex(obj.NewNameIndex)
  {
  }
  CUpdatePair2 & operator= (const CUpdatePair2 & obj)
  {
	  NewData = obj.NewData;
	NewProps = obj.NewProps;
	IsAnti = obj.IsAnti;
	DirIndex = obj.DirIndex;
	ArcIndex = obj.ArcIndex;
	NewNameIndex = obj.NewNameIndex;
	  return *this;
  }
};

struct IUpdateProduceCallback
{
  virtual HRESULT ShowDeleteFile(int arcIndex) = 0;
};

void UpdateProduce(
    const std::vector<CUpdatePair> &updatePairs,
    const Update::CActionSet &actionSet,
	std::vector<CUpdatePair2> &operationChain,
    IUpdateProduceCallback *callback);

}
}

#endif
